Data storage systems are arrangements of hardware and software that include storage processors coupled to arrays of non-volatile storage devices. In typical operation, the storage processors service storage requests that arrive from users. The storage requests specify data elements in the arrays of non-volatile storage devices to be written, read, created, or deleted, for example.
Data storage systems typically allocate non-volatile storage in increments known as “slices.” Slices are derived from the arrays of non-volatile storage devices and provide building blocks from which user objects may be composed. “User objects” include LUNs (logical storage units), file systems, and vVOLs (virtual volumes), for example. Some data storage systems provide slices in fixed-sized increments, such as 1 GB or 256 MB, whereas others provide slices in variable sizes.
Data storage systems typically maintain metadata for tracking slice allocation. In some systems, different drivers running on the data storage systems maintain different views of slice allocation metadata. For example, as users change data on a data storage system or as the system reorganizes user data on different storage devices, the drivers update their respective views of slice allocation metadata to reflect changes.
Sometimes, slice allocation metadata can become corrupted. Corruption can result from software errors or hardware errors, for example, and can cause slice allocation metadata as maintained by different drivers to conflict. For example, one driver's metadata may show a given slice as allocated to one user object hosted by the data storage system, whereas another driver's metadata may show the same slice as allocated to another user object. Software engineers have developed metadata recovery tools to address metadata corruption. Such tools check slice allocation metadata for consistency and attempt to repair errors.